﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Forms.GestionClientes;
using Ferreteria.Clases;
namespace Ferreteria.Forms
{
    public partial class frmGestionarClientes : Form
    {
        DisancoEntities context;
        string categusuario;
        int diasacalc;
        public frmGestionarClientes(string categoriausuario)
        {
            InitializeComponent();
            cmbTipoBusqueda.SelectedIndex = 0;
            diasacalc = 60;

            categusuario = categoriausuario;
            if (categoriausuario == Categoria.Empleado)
               tsbEliminarCliente.Enabled = false;
                
            else
                tsbEliminarCliente.Enabled = true;
                
            dgvClientes.AutoGenerateColumns = false;

            CargarGrillaClientes();
        }

        private void CargarGrillaClientes()
        {
            try
            {
                context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                txbBusqueda.Text = "";
                cmbTipoBusqueda.SelectedIndex = 0;
                
                dgvClientes.DataSource = context.VistaClientes;

                if (dgvClientes.CurrentRow != null)
                {
                    btnModificarCliente.Enabled = true;
                    tsbVerInformacion.Enabled = true;
                    tsbEliminarCliente.Enabled = true;
                }
                else
                {
                    btnModificarCliente.Enabled = false;
                    tsbVerInformacion.Enabled = false;
                    tsbEliminarCliente.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        void buscarClientes()
        {
            if (txbBusqueda.Text.Length > 4)
            {
                try
                {
                    //    if (articuloSeleccionado != null)
                    //        cargarArticulos();

                    context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);



                    string cadena = txbBusqueda.Text;
                    string tipo_busqueda = (string)cmbTipoBusqueda.SelectedItem;

                    IEnumerable<VistaClientes> busqueda;

                    switch (tipo_busqueda)
                    {
                        case "CUIT":
                            {
                                busqueda = from vc in context.VistaClientes
                                           where vc.cliente_cuit == cadena
                                           select vc;
                                break;
                            }
                        case "DNI":
                            {
                                try
                                {
                                    busqueda = from vc in context.VistaClientes
                                               where vc.cliente_nro_doc == cadena
                                               select vc;
                                }
                                catch
                                {
                                    MessageBox.Show("Ingrese un DNI válido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    busqueda = context.VistaClientes;
                                }
                                break;
                            }
                        default:
                            {
                                busqueda = from cli in context.VistaClientes
                                           where cli.cliente_nombre.Contains(cadena)
                                           select cli;
                                break;
                            }
                    }

                    dgvClientes.DataSource = busqueda;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            string cadena = txbBusqueda.Text;
            string tipo_busqueda =(string)cmbTipoBusqueda.SelectedItem;
            
            IEnumerable<VistaClientes> busqueda;

            switch (tipo_busqueda)
            {
                case "CUIT":
                    {
                        busqueda = from vc in context.VistaClientes
                                   where vc.cliente_cuit == cadena
                                   select vc;
                        break;
                    }
                default:
                    {
                        busqueda = from cli in context.VistaClientes
                                   where cli.cliente_nombre.Contains(cadena)
                                   select cli;
                        break;
                    }
            }

            dgvClientes.DataSource = busqueda;
        }

        private void tsbVerInformacionDetallada_Click(object sender, EventArgs e)
        {
            int clienteId = (int)dgvClientes.CurrentRow.Cells["cliente_id"].Value;
      
            frmVerInformacionCliente info = new frmVerInformacionCliente(clienteId, categusuario, diasacalc);
            info.ShowDialog();
        }

        private void btnAgregarCliente_Click(object sender, EventArgs e)
        {
            frmAgregarCliente AgregCli = new frmAgregarCliente();
            DialogResult dr = AgregCli.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                CargarGrillaClientes();
            }
        }

        private void btnModificarCliente_Click(object sender, EventArgs e)
        {
            int ClienteId = Convert.ToInt32(dgvClientes[0, dgvClientes.CurrentRow.Index].Value.ToString());

            frmAgregarCliente ModifCli = new frmAgregarCliente(ClienteId);
            DialogResult dr = ModifCli.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
                CargarGrillaClientes();
        }

        private void txbActualizar_Click(object sender, EventArgs e)
        {
            CargarGrillaClientes();
        }

        private void txbBusqueda_TextChanged(object sender, EventArgs e)
        {
            buscarClientes();
        }

        private void tsbEliminarCliente_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("¿Seguro que desea eliminar este cliente?", "Confirmar operación", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                try
                {
                    int id = (int)dgvClientes.CurrentRow.Cells["cliente_id"].Value;
                    var cliente_a_eliminar = context.Clientes.FirstOrDefault(c => c.cliente_id == id);
                    context.Clientes.DeleteObject(cliente_a_eliminar);
                    context.SaveChanges();
                    MessageBox.Show("El cliente fue eliminado exitosamente", "Operación exitosa", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    CargarGrillaClientes();
                }
                catch
                {
                    MessageBox.Show("No se pudo eliminar este cliente. Probalemente existen transacciones vinculadas a el", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void tsbRegistrarPago_Click(object sender, EventArgs e)
        {
            int id = (int)dgvClientes.CurrentRow.Cells["cliente_id"].Value;

            frmRegistrarPago pago = new frmRegistrarPago(id);
            DialogResult dr = pago.ShowDialog();
        }

        private void dgvClientes_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int clienteId = (int)dgvClientes.CurrentRow.Cells["cliente_id"].Value;

            frmVerInformacionCliente info = new frmVerInformacionCliente(clienteId,categusuario,diasacalc);
            info.ShowDialog();
        }

     

       
    }
}
